﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Activation;
using System.Collections;
using System.Data;
using System.Text.RegularExpressions;
using CMD.BAL.AUTH;
using System.IO;
using System.Web.Hosting;
using System.ServiceModel.Web;
using CMD_WEB.FileServer;
using System.Net.Mail;
using System.Net;

namespace CMD_WEB.Services
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [DataContractFormat]
    public class Auth : IAuth
    {
        /// <summary>
        /// BZG
        /// Obtiene la lista de correos por grupo
        /// </summary>
        /// <returns></returns>
        public string RelGroupCorreo(string group)
        {
            CMD.BAL.MISC.UpsertStateMsg urs;
            List<UserData> ListaUsuarios = new List<UserData>();
            User o = new User();

            //Obtiene los datos de los usuarios del grupo Active DIrectory especificado
            try
            {
                ListaUsuarios = o.GetListUserData(group);
                string correos = "";
                foreach (UserData user in ListaUsuarios)
                {
                    correos += user.UserMail + ";";
                }
                correos = correos.Remove(correos.Length - 1);

                urs = o.UpsertMailbyGroup(group, correos);
                return correos;

            }
            catch
            {
                return o.GetMailbygroup(group);
            }



        }

        public CMD_WEB.BAL.JSONOBJ.UserInfo GetGruposUsuario()
        {
            //decalaramos un objeto de CMD_WEB.BAL de la carpeta JSONOBJ de la clase UserInfo 
            CMD_WEB.BAL.JSONOBJ.UserInfo  gruposUsuario;
            
            gruposUsuario = CMD_WEB.BAL.Auth.GetGruposUsuario();

            return gruposUsuario;
        }
        //------------------NUEVO METODO-----------------------
        public CMD.BAL.AUTH.AuthUserRol GetUserRolListRol(string idRol) 
        {
            Boolean admin = false;
            Boolean reporte = false;
            //string usr;
            //usr = CMD.BAL.AUTH.AuthUserRol.AuthUser();
            //Rol rol;
            //rol = CMD.BAL.AUTH.AuthUserRol.GetRol(idRol);

            //List<Rol> listRol;
            //string[] _idRol;
            //_idRol = idRol.Split(',');
            //listRol = CMD.BAL.AUTH.AuthUserRol.GetDataListRol(null);
            //CMD.BAL.AUTH.AuthUserRol result;
            //result = new AuthUserRol(usr,listRol,rol.idRol,rol.rol);
            //return result;
            List<Rol> listRol;
            string mail;
            string usr;
            usr = CMD.BAL.AUTH.AuthUserRol.AuthUser();
            listRol = CMD.BAL.AUTH.AuthUserRol.GetDataListRol(GetUsrRolListStr().ToArray(typeof(string)) as string[],ref admin,ref reporte);
            if (listRol == null)
                return null;
            Rol rol;
            rol = CMD.BAL.AUTH.AuthUserRol.GetRol(listRol[0].idRol);
            mail = CMD.BAL.AUTH.AuthUserRol.GetMailUser(usr);
            CMD.BAL.AUTH.AuthUserRol result;
            result = new AuthUserRol(usr, listRol, rol.idRol, rol.rol,mail,admin,reporte);
            return result;
        }

        /// <summary>
        /// Obtiene la Lista de Roles del usuario dependiendo de los grupos de usuario a los que pertenece
        /// </summary>
        /// <returns></returns>
        public List<Rol> GetUsrRolList()
        {
            Boolean admin=false;
            Boolean reporte = false;
            ArrayList groups = new ArrayList();
            foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
            {
                groups.Add(group.Translate(typeof(System.Security.Principal.NTAccount)).ToString());
            }

            string[] grupos = groups.ToArray(typeof(string)) as string[];   // Lista de grupos en los que se encuentra el usuario, dentro de un arreglo de strings

            List<Rol> listaRoles = CMD.BAL.AUTH.AuthUserRol.GetDataListRol(grupos,ref admin,ref reporte);

            return listaRoles;      

        }

        public ArrayList GetUsrRolListStr()
        {
            ArrayList groups = new ArrayList();
            foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
            {
                string tmp = group.Translate(typeof(System.Security.Principal.NTAccount)).ToString();
                if (tmp.Split('\\').Length > 1)
                    groups.Add(tmp.Split('\\').Last().ToString());
            }
            //groups.Add("Grupo Correo Datos Maestros");
            return groups;

        }

        //metodo para obtener la lista de ROLES
        public CMD.BAL.AUTH.Rol GetDataRol(string aIdRol)
        {
            //List<CMD.BAL.AUTH.Rol> rol;
            //string[] _aIdRol;
            //if (aIdRol == null)
            //{
            //    rol = CMD.BAL.AUTH.Rol.GetDataRol(null);
            //    return rol;
            //}
            //else 
            //{
            //    _aIdRol = aIdRol.Split(',');
            //    rol = CMD.BAL.AUTH.Rol.GetDataRol(_aIdRol);
            //    return rol;
            //} 
            CMD.BAL.AUTH.Rol roles;
            roles = CMD.BAL.AUTH.Rol.GetDataRol(aIdRol);
            return roles;           
        }
        //metodo para obtener la lista de ROLES solo el id y el descriptor
        public List<CMD.BAL.AUTH.Rol> GetDataListRol(string aIdRol)
        {
            List<CMD.BAL.AUTH.Rol> rol;
            string[] _aIdRol;
            if (aIdRol == null)
            {
                rol = CMD.BAL.AUTH.Rol.GetDataListRol(null);
                return rol;
            }
            else
            {
                _aIdRol = aIdRol.Split(',');
                //rol = CMD.BAL.AUTH.Rol.GetDataRol(_aIdRol);
                rol = CMD.BAL.AUTH.Rol.GetDataListRol(_aIdRol);
                return rol;
            }
        }
        //metodo nuevo para obtener la lista de roles activos por grupo
        public List<CMD.BAL.AUTH.Rol> GetDataListRolCheck(string aIdGroup)
        {
            List<CMD.BAL.AUTH.Rol> rol;
            rol = CMD.BAL.AUTH.Rol.GetDataListRolCheck(aIdGroup);
                return rol;
            
        }

        //metodo nuevo para obtener la LISTA de GRUPOS
        public List<CMD.BAL.AUTH.Group> GetDataListGroup(string aIdGroup)
        {
            string[] _aIdGroup; 
            List<CMD.BAL.AUTH.Group> groups;
            if (aIdGroup==null)
            {
                groups = CMD.BAL.AUTH.Group.GetDataListGroup(null);
                return groups;
            }
            else
            {
                _aIdGroup = aIdGroup.Split(',');
                groups = CMD.BAL.AUTH.Group.GetDataListGroup(_aIdGroup);
                return groups;
            }
            
        }
        //metodo para obtener UN GRUPO
        public CMD.BAL.AUTH.Group GetDataGroup(string aIdGroup)
        {
            CMD.BAL.AUTH.Group groups;
            groups = CMD.BAL.AUTH.Group.GetDataGroup(aIdGroup);
            return groups;
        }
        //metodo para agregar UN GRUPO  mediante UN ROL
        public string AddGroup(int idGroup,string parametrosRol)
        {
            string add;
            CMD.BAL.AUTH.Group rg;
            rg = new CMD.BAL.AUTH.Group(null, null, idGroup, parametrosRol, null);
            add = CMD.BAL.AUTH.Rol.AddGroup(parametrosRol, rg);
            return add;
        }
        //metodo para agregar o acualizar un ROL 
        public CMD.BAL.MISC.UpsertStateMsg UpsertRol(string idRol, int prio, string rol)
        {
            CMD.BAL.MISC.UpsertStateMsg insertRol;
            CMD.BAL.AUTH.Rol roles;
            roles = new Rol (idRol, prio, rol);
            insertRol = CMD.BAL.AUTH.Rol.UpsertRol(roles);
            return insertRol;
        }
        //metodo para agregar o actualizar un GRUPO
        public CMD.BAL.MISC.UpsertStateMsg UpsertGroup(string groupName, string groupMail, int idGroup,string idRol,string dscRol)
        {
            CMD.BAL.MISC.UpsertStateMsg insertGroup;
            CMD.BAL.AUTH.Group grp;
            grp = new CMD.BAL.AUTH.Group(groupName, groupMail, idGroup,idRol,dscRol);
            insertGroup = CMD.BAL.AUTH.Group.UpsertGroup(grp);
            return insertGroup;
        }
        //metodo para eliminar ROLES
        public CMD.BAL.MISC.DeleteStateMsg DeleteRol(string aIdRol)
        {
            string[] _aIdRol = aIdRol.Split(',');
            CMD.BAL.MISC.DeleteStateMsg delete;
            delete = CMD.BAL.AUTH.Rol.DeleteRol(_aIdRol);
            return delete;
        }
        //metodo para eliminar GRUPOS
        public CMD.BAL.MISC.DeleteStateMsg DeleteGroup(string aIdGroup)
        {
            string[] _aIdGroup = aIdGroup.Split(',');
            CMD.BAL.MISC.DeleteStateMsg delete;
            delete = CMD.BAL.AUTH.Group.DeleteGroup(_aIdGroup);
            return delete;
        }
        //metodo para obtener BANCO
        public List<CMD.BAL.CAT.Banco> GetDataBanco()
        {
            List<CMD.BAL.CAT.Banco> bn;
            bn = CMD.BAL.CAT.Banco.GetDataBanco();
            return bn;
        }
        public CMD.BAL.CAT.Banco GetDataDscBanco(string idBanco)
        {
            CMD.BAL.CAT.Banco ban;
            ban = CMD.BAL.CAT.Banco.GetDataDscBanco(idBanco);
            return ban;
        }
        //metodo para obtener CLO
        public List<CMD.BAL.CAT.Clo> GetDataClo() 
        {
            List<CMD.BAL.CAT.Clo> cl;
            cl = CMD.BAL.CAT.Clo.GetDataClo();
            return cl;
        }
        public CMD.BAL.CAT.Clo GetDataCloCodigo(int idClo)
        {
            CMD.BAL.CAT.Clo clc;
            clc = CMD.BAL.CAT.Clo.GetDataCloCodigo(idClo);
            return clc;
        }
        //metodo para obtener territorio
        public List<CMD.BAL.CAT.EstructuraGeografica> GetDataEstructuraGeografica()
        {
            List<CMD.BAL.CAT.EstructuraGeografica> eg;
            eg = CMD.BAL.CAT.EstructuraGeografica.GetDataEstructuraGeografica();
            return eg;
        }

        public CMD.BAL.CAT.EstructuraGeografica GetDataEstructuraGeograficaTerritorio( string idTerritorio)
        {
            if (idTerritorio == "null" || idTerritorio == null || idTerritorio == "")
            {
                return null;
            }
            else
            {
                CMD.BAL.CAT.EstructuraGeografica egt;
                egt = CMD.BAL.CAT.EstructuraGeografica.GetDataEstructuraGeograficaTerritorio(idTerritorio);
                return egt;
            }
        }
        //metodo para obtener FRECUENCIA
        public List<CMD.BAL.CAT.Frecuencia> GetDataFrecuencia()
        {
            List<CMD.BAL.CAT.Frecuencia> fr;
            fr = CMD.BAL.CAT.Frecuencia.GetDataFrecuencia();
            return fr;
        }
        //metodo para obtener LEAD_TIME
        public List<CMD.BAL.CAT.LeadTime> GetDataLeadTime()
        {
            List<CMD.BAL.CAT.LeadTime> lt;
            lt = CMD.BAL.CAT.LeadTime.GetDataLeadTime();
            return lt;
        }
        //metodo para obtener MEDIO_COLOCACION
        public List<CMD.BAL.CAT.MedioColocacion> GetDataMedioColocacion()
        {
            List<CMD.BAL.CAT.MedioColocacion> mc;
            mc = CMD.BAL.CAT.MedioColocacion.GetDataMedioColocacion();
            return mc;
        }
        //metodo para obtener TIPO_NEGOCIO
        public List<CMD.BAL.CAT.TipoNegocio> GetDataTipoNegocio()
        {
            List<CMD.BAL.CAT.TipoNegocio> tn;
            tn = CMD.BAL.CAT.TipoNegocio.GetDataTipoNegocio();
            return tn;
        }
        //metodo para obtener TIPO_PERSONA_FISICA
        public List<CMD.BAL.CAT.TipoPersonaFisica> GetDataTipoPersonaFisica()
        {
            List<CMD.BAL.CAT.TipoPersonaFisica> tpf;
            tpf = CMD.BAL.CAT.TipoPersonaFisica.GetDataTipoPersonaFisica();
            return tpf;
        }
        //metodo para obtener TIPO_SOLICITANTE
        public List<CMD.BAL.CAT.TipoSolicitante> GetDataTipoSolicitante()
        {
            List<CMD.BAL.CAT.TipoSolicitante> ts;
            ts = CMD.BAL.CAT.TipoSolicitante.GetDataTipoSolicitante();
            return ts;
        }
        //metodo para obtener ZONA
        public List<CMD.BAL.CAT.Zona> GetDataZona()
        {
            List<CMD.BAL.CAT.Zona> zn;
            zn = CMD.BAL.CAT.Zona.GetDataZona();
            return zn;
        }
        public List<CMD.BAL.CAT.Zona> GetDataIdZone(int idClo)
        {
            List<CMD.BAL.CAT.Zona> ze;
            ze = CMD.BAL.CAT.Zona.GetDataIdZone(idClo);
            return ze;
        }
        public CMD.BAL.CAT.Iva GetDataIva(int idZona)
        {
            CMD.BAL.CAT.Iva iva;
            iva = CMD.BAL.CAT.Iva.GetDataIva(idZona);
            return iva;

        }
        //metodo para obtener CODIGO_POSTAL
        public List<CMD.BAL.CAT.Sepomex> GetDataCodigoPostal(string idCodigoPostal, string idColonia)
        {
            List<CMD.BAL.CAT.Sepomex> sm;
            sm = CMD.BAL.CAT.Sepomex.GetDataCodigoPostal(idCodigoPostal,idColonia);
            return sm;
        }
        //metodo para obtener LISTA de COLONIA
        //public List<CMD.BAL.CAT.Sepomex> GetDataListCol(string idCodigoPostal)
        //{
        //    List<CMD.BAL.CAT.Sepomex> sm;
        //    sm = CMD.BAL.CAT.Sepomex.GetDataListCol(idCodigoPostal);
        //    return sm;
        //}
        //metodo para obtener ESTADO y MINICIPIO
        //public CMD.BAL.CAT.Sepomex GetDataEstMun(string idCodigoPostal)
        //{

        //    CMD.BAL.CAT.Sepomex sm;
        //    sm = CMD.BAL.CAT.Sepomex.GetDataEstMun(idCodigoPostal);

        //    return sm;
        //}
        //metodo para obtener IDCOLONIA,COLONIA,ESTADO y MINICIPIO
        public CMD.BAL.CAT.Sepomex GetDataEstMunCol(string idCodigoPostal)
        {
            if (idCodigoPostal == null)
            {
                return null;
            }
            else
            {
                List<CMD.BAL.CAT.Sepomex> l;
                l= CMD.BAL.CAT.Sepomex.GetDataListCol(idCodigoPostal);
            
                CMD.BAL.CAT.Sepomex em;
                em = CMD.BAL.CAT.Sepomex.GetDataEstMun(idCodigoPostal);
                if (l == null || em == null)
                {
                    return null;
                }
                else
                {
                    CMD.BAL.CAT.Sepomex s;
                    s = new CMD.BAL.CAT.Sepomex(l,em.idEstado, em.estado,em.idMunicipio ,em.municipio,null);
                    return s;
                }
            }
        }
        public List<CMD.BAL.CAT.Sepomex> GetDataListLocalidad(string idEstado, string idMunicipio)
        {
            List<CMD.BAL.CAT.Sepomex> loc;
            loc = CMD.BAL.CAT.Sepomex.GetDataListLocalidad(idEstado, idMunicipio);
            return loc;
 
        }
        public List<CMD.BAL.CAT.GrupClientes> GetDataGroupClientes()
        {
           
                List<CMD.BAL.CAT.GrupClientes> gc;
                gc = CMD.BAL.CAT.GrupClientes.GetDataGroupClientes();
                return gc;
                
        }
        public CMD.BAL.CAT.GrupClientes GetDataGroupClientes4(string idTipoNegocio)
        {
            if (idTipoNegocio == "null" || idTipoNegocio == null || idTipoNegocio == "")
            {
                return null;
            }
            else
            {
                CMD.BAL.CAT.GrupClientes g;
                g = CMD.BAL.CAT.GrupClientes.GetDataGroupClientesTipoNegocio(idTipoNegocio);
                return g;
            }

        }
        public CMD.BAL.CAT.GrupoPrecios GetDataGroupPrecios(string idTipoNegocio)
        {
            if (idTipoNegocio == "null" || idTipoNegocio == null || idTipoNegocio == "")
            {
                return null;
            }
            else
            {
                CMD.BAL.CAT.GrupoPrecios gp;
                gp = CMD.BAL.CAT.GrupoPrecios.GetDataGroupPrecios(idTipoNegocio);
                return gp;
            }

        }
        //public CMD.BAL.CAT.GrupClientes GetDataGroupClientes4(string idTipoNegocio)
        //{
        //    if (idTipoNegocio == "null" || idTipoNegocio == null || idTipoNegocio == "")
        //    {
        //        return null;
        //    }
        //    else
        //    {
        //        List<CMD.BAL.CAT.GrupClientes> gc;
        //        gc = CMD.BAL.CAT.GrupClientes.GetDataGroupClientes();
        //        CMD.BAL.CAT.GrupClientes gcli;
        //        gcli = CMD.BAL.CAT.GrupClientes.GetDataGroupClientesTipoNegocio(idTipoNegocio);
        //        CMD.BAL.CAT.GrupClientes g;
        //        if (gcli == null)
        //        {
        //            g = new CMD.BAL.CAT.GrupClientes(gc, null); 
        //            return g;
        //        }
        //        else
        //        {
        //            g = new CMD.BAL.CAT.GrupClientes(gc, gcli.idGrupoClientes);
        //            return g;
        //        }
        //    }
        //}

        //metodo para obtener SOLICITUDES (TIPO(Alta,Modificacion y Reemplazo) y STATUS(Borradores y Aprobadas))
        public List<CMD.BAL.SOL.solicitudData> RecuperaTodasRol(bool todas, int idStatus, int idTipo, string unidRol)
        {
            List<CMD.BAL.SOL.solicitudData> solr;
            solr = CMD.BAL.SOL.RecuperarSol.RecuperaTodasRol(todas,idStatus,idTipo,unidRol);
            return solr;
        }
        //public List<CMD.BAL.SOL.solicitudData> RecuperaTodas(bool todas, int idStatus, int idTipo)
        //{
        //    List<CMD.BAL.SOL.solicitudData> sol;
        //    sol = CMD.BAL.SOL.RecuperarSol.RecuperaTodas(todas, idStatus, idTipo);
        //    return sol;
        //}
        public CMD.BAL.SOL.RecuperarSol RefreshCounters(string unidRol)
        {
            CMD.BAL.SOL.RecuperarSol sol;
            sol = CMD.BAL.SOL.RecuperarSol.RefreshCounters(unidRol);
            return sol;
        }
        /*-------------------------METODO DE SIGUIENTE ROL----------------------------------*/

        public CMD.BAL.MISC.UpsertStateMsg UpdateRolStatus(string unidSolicitud, string unidRol, string pventa, string datsol_isOtrasCategorias, string datsol_isOtrosClientes, int idStatus, string datsol_unidTipoSolicitante, int idTipoSolicitud, int datsol_isMismoDomicilio)
        {
            
            CMD.BAL.MISC.UpsertStateMsg urs;
            urs = CMD.BAL.AUTH.AuthRol.UpdateRolStatus(unidSolicitud, unidRol, pventa, datsol_isOtrasCategorias, datsol_isOtrosClientes, idStatus, datsol_unidTipoSolicitante, idTipoSolicitud, datsol_isMismoDomicilio);
            return urs;
        }
        public CMD.BAL.AUTH.VisibilityDiv GetDataDivVisibility(string unidRol)
        {
            CMD.BAL.AUTH.VisibilityDiv dv;
            dv = CMD.BAL.AUTH.VisibilityDiv.GetDataDivVisibility(unidRol);
            return dv;
        }
        public string GetDataSolicitudWeb(string unidSolicitud, string unidRol)
        {
            string a="";

            if ((unidSolicitud == "null" || unidRol == "null") || (unidSolicitud == null || unidRol == null) || (unidSolicitud == "" || unidRol == ""))
            {
                return a="faltan parametros";
            }
            else
            {
                a = CMD.BAL.SOL.SolicitudWeb.GetDataSolicitudWeb(unidSolicitud,unidRol);
                return a;
            }
        }
        //________________________________________-
        public string GetDataSolStatusRol(string unidSolicitud)
        {
            string ssr = "";

            if (unidSolicitud == "null" || unidSolicitud == null || unidSolicitud == "")
            {
                return ssr = "no hay datos ";
            }
            else
            {
                ssr = CMD.BAL.SOL.SolicitudWeb.GetDataSolStatusRol(unidSolicitud);
                return ssr;
            }
        }

        public CMD.BAL.SOL.NotificacionesWeb GetDataEmail(string unidSolicitud, int idStatus)
        {
           // CMD_WEB.Notificacion.EnviaNotificacion("ing", "2329389237873", "aceptar");
            CMD.BAL.SOL.NotificacionesWeb em= new CMD.BAL.SOL.NotificacionesWeb();

            if (unidSolicitud == "null" || unidSolicitud == null || unidSolicitud == "" || idStatus==0)
            {
                return em = null;
            }
            else
            {
                em = em.GetDataEmail(unidSolicitud, idStatus);
                return em;
            }
        }

        // duda de validacion
        public string UpsertWeb(string unidSolicitud)
        {
            if (unidSolicitud==null || unidSolicitud=="" || unidSolicitud=="null")
            {
                return null;   
            }
            string b;
            b = CMD.BAL.SOL.UpsertSolicitudWeb.UpsertWeb(unidSolicitud);
            return b;
        }
        
        /*---------------METODO DE SINCRONIZACION PARA INSERTAR SOLICITUD--------------------------*/
        public string InsertSolicitudWeb(string unidSolicitud)
        {
            if (unidSolicitud == null || unidSolicitud == "" || unidSolicitud == "null")
            {
                return "parametro vacio";
            }
            string c;
            c = CMD.BAL.SOL.UpsertSolicitudWeb.InsertSolicitudWeb(unidSolicitud);
            return c;
        }
        public CMD.BAL.MISC.DeleteStateMsg DeleteSolicitudWeb(string aIdWeb)
        {
            string[] _aIdWeb = aIdWeb.Split(',');
            CMD.BAL.MISC.DeleteStateMsg delete;
            delete = CMD.BAL.SOL.DeleteWeb.DeleteSolicitudWeb(_aIdWeb);
            return delete;
        }
        public CMD.BAL.SOL.DocumentosWeb GetDocuments(string idSolicitud)
        {
            if (idSolicitud == "null" || idSolicitud == null ||idSolicitud == "")
            {
                return null;
            }
            else
            {
                List<CMD.BAL.SOL.DocumentosWeb> docs;
                docs = CMD.BAL.SOL.DocumentosWeb.GetDataListDocuments(idSolicitud);

                CMD.BAL.SOL.DocumentosWeb doctos_unidDoctos;
                doctos_unidDoctos = CMD.BAL.SOL.DocumentosWeb. GetDataDocumets(idSolicitud);

                CMD.BAL.SOL.DocumentosWeb s;
                if (doctos_unidDoctos == null || docs == null)
                {
                    return null;
                }
                else
                {
                    s = new CMD.BAL.SOL.DocumentosWeb(doctos_unidDoctos.doctos_unidDoctos, docs);
                    return s;
                }
            }
        }
        /*---------------METODO DE SINCRONIZACION PARA INSERTAR DOCUMENTOS--------------------------*/
        public string InsertDocs(string parametrosDocs)
        {
            if (parametrosDocs == null || parametrosDocs == "" || parametrosDocs == "null")
            {
                return "no hay datos";
            }
            string d;
            d = CMD.BAL.SOL.SolicitudDocs.InsertDocs(parametrosDocs);
            return d;
        }
        public  int InsertDetalle(string parametrosDetalle)
        {
            if (parametrosDetalle == null || parametrosDetalle == "" || parametrosDetalle == "null")
            {
                return 0;
            }
            int detalle;
            detalle = CMD.BAL.SOL.DetallesWeb.InsertDetalle(parametrosDetalle);
            return detalle;
        }

        public CMD.BAL.SOL.LastReviewDate GetDataFecha()
        {
            CMD.BAL.SOL.LastReviewDate lrd;
            lrd = CMD.BAL.SOL.LastReviewDate.GetDataFecha();
            return lrd;
        }
        public string GetDataListObject(string unid_rol)
        {
            string obj;
                obj= CMD.BAL.SOL.ObjectWeb.GetDataObject(unid_rol);
            return obj;
       }
        public List<CMD.BAL.SOL.SolicitudDocInfo> GetDataDocInfo(string idSolicitud)
        {
            if (idSolicitud == null || idSolicitud == "" || idSolicitud == "null")
            {
                return null;
            }
            List<CMD.BAL.SOL.SolicitudDocInfo> inf;
            inf = CMD.BAL.SOL.SolicitudDocInfo.GetDataDocInfo(idSolicitud);
            return inf;
        }
        public List<CMD.BAL.SOL.ArchivosWeb> GetDataArchivosUpload(string unidSolicitud)
        {
            if (unidSolicitud == null || unidSolicitud == "" || unidSolicitud == "null")
            {
                return null;
            }
            List<CMD.BAL.SOL.ArchivosWeb> ach;
            ach = CMD.BAL.SOL.ArchivosWeb.GetDataArchivosUpload(unidSolicitud);
            return ach;
        }

        public string GetInfoModif(string numCliente)
        {
            if (numCliente == null || numCliente == "" || numCliente == "null")
                return null;
            return CMD.BAL.SOL.SolicitudModif.GetInfoModif(numCliente);
        }

        public string GetInfoMessage(string numCliente)
        {
            if (numCliente == null || numCliente == "" || numCliente == "null")
                return null;
            return CMD.BAL.SOL.SolicitudModif.GetInfoMessage(numCliente);
        }

        public string ServicioSap(string DatosSap)
        {
            if (DatosSap == null || DatosSap == "" || DatosSap == "null")
                return null;
            return CMD.BAL.SOL.InsertSap.insertSapSol(DatosSap);

        }

        //Servicio Envio de Correo
        public void EnviaNotificacion(string email, string unidSolicitud, string msgs, string msgAsunto)
        {
            string[] a;
            a = email.Split(';');
            MailMessage msg = new MailMessage();

            //System.Diagnostics.Process proc = new System.Diagnostics.Process();

            //proc.StartInfo.FileName = "C:\\users\\a-correah\\Desktop\\EnvioCorreo.exe";

            //try
            //{
            //    proc.Start();
            //}

            string fromemail = System.Configuration.ConfigurationManager.AppSettings["FromEmail"];
            for (int x = 0; x < a.Length; x++)
            {
                msg.To.Add(new MailAddress(a[x]));
            }
            msg.From = new MailAddress(fromemail);

            //msg.To.Add("beliulsa@gmail.com");
            //msg.From = new MailAddress("beliulsa@gmail.com");

            msg.Subject = msgAsunto;
            msg.Body = msgs;
            SmtpClient clienteSmtp = new SmtpClient("secure.smtp.pmi", 25);

            //SmtpClient clienteSmtp = new SmtpClient("smtp.gmail.com", 587);
            //clienteSmtp.Credentials = new NetworkCredential("ing.cisnecar@gmail.com", "mono2086");
            //clienteSmtp.EnableSsl = true;
            try
            {
                if (email == null || email == "" || email == "null" || unidSolicitud == null || unidSolicitud == "" || unidSolicitud == "null")
                  return;
                CMD.BAL.SOL.NotificacionesWeb.EnviaNotificacion(email, unidSolicitud, msgs, msgAsunto);
            }
            catch (Exception e)
            {
                
                throw e;
            }
            

        }


        //--------------------------------------------  inicio MÉTODOS PARA SAP
        public string GetInfoModif_SAP(string numCliente)
        {
            try
            {
                if (numCliente == null || numCliente == "" || numCliente == "null")
                    return null;
                return CMD.BAL.SOL.SolicitudModif.GetInfoModif_SAP(numCliente);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public string AltaSAP(string alta)
        {
            return "";
        }//end AltaSAP


        public CMD.BAL.MISC.UpsertStateMsg UpdateRolStatus2(string unidSolicitud, string unidRol, string pventa, string datsol_isOtrasCategorias, string datsol_isOtrosClientes, int idStatus, string datsol_unidTipoSolicitante, int idTipoSolicitud, int datsol_isMismoDomicilio)
        {

            CMD.BAL.MISC.UpsertStateMsg urs;
            urs = CMD.BAL.AUTH.AuthRol.UpdateRolStatus2(unidSolicitud, unidRol, pventa, datsol_isOtrasCategorias, datsol_isOtrosClientes, idStatus, datsol_unidTipoSolicitante, idTipoSolicitud, datsol_isMismoDomicilio);
            return urs;
        }
        //--------------------------------------------  fin MÉTODOS PARA SAP

        /// <summary>
        /// Obtiene solicitudes filtrando por Número de Cliente y/o por RFC
        /// </summary>
        /// <param name="todas"></param>
        /// <param name="idStatus"></param>
        /// <param name="idTipo"></param>
        /// <param name="unidRol"></param>
        /// <returns></returns>
        public List<CMD.BAL.SOL.solicitudData> GetSolicitudesFiltradas(string unidRol,string noCte, string rfc)
        {
            List<CMD.BAL.SOL.solicitudData> solr;
            solr = CMD.BAL.SOL.RecuperarSol.RecuperaSolicitudesFiltradas(unidRol,noCte, rfc);
            return solr;
        }

    }
}
    